CIR 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 | 注释说明 |
---|---|---|
CIR | consumer IR | 消费者红外 |
RLC | Run-Length Code | 游程编码 |
NEC | 一种红外编码协议 | |
RC5 | 一种红外编码协议 | |
RC6 | 一种红外编码协议 |
1.2. 模块简介
CIR模块包含发送器和接收器,用于发送和接收红外信号。该模块可生成或捕获各类数字脉冲信号。模块使用游程编码(RLC)方式编码数字脉冲信号,以字节为单位记录编码数据,MSB位表示信号电平(1表示高电平,0表示低电平),其余7位以采样时钟为单位表示信号宽度(最大宽度为128,如果大于128则使用另一字节存储)。
CIR模块基本特性如下:
- 全物理层执行
- 采用游程编码
- 载波频率及占空比可编程,支持任意波形发生
- 支持中断
- 不支持DMA
2. CIR配置
2.1. 内核配置
Device Drivers
<*> Remote Controller support--->
[*] LIRC user interface
[*] Remote controller decoders--->
<*> Enable IR raw decoder for the NEC protocol
< > Enable IR raw decoder for the RC-5 protocol
< > Enable IR raw decoder for the RC-6 protocol
< > Enable IR raw decoder for the Sony protocol
< > Enable IR raw decoder for the Sanyo protocol
[*] Remote Controller devices--->
<*> ArtInChip IR remote control
注解
上图只是说明需要选择相应的红外协议,实际使用中可根据需要选择相应协议,CIR模块驱动可支持的协议有:NEC、RC5、RC6、Sony、Sanyo。
2.2. DTS配置
2.2.1. D211配置
CIR模块基本配置
cir: cir@19260000 {
compatible = "artinchip,aic-cir-v1.0";
reg = <0x0 0x19260000 0x0 0x400>;
interrupts-extended = <&plic0 95 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_CIR>;
resets = <&rst RESET_CIR>;
};
xxx/board.dts配置
&cir {
pinctrl-names = "default";
pinctrl-0 = <&cir_pins_a>;
rx-level = <1>;
linux,rc-map-name = "rc-empty";
status = "okay";
};
注解
- rx-level为1,表示在空闲 状态下,RX为高电平,激活状态下为低电平;
- rx-level为0,表示在空闲状态下,RX为低电平,激活状态下为高电平。
- rx-level参数的设置与PCB板的硬件电路设计相关
注解
属性linux,rc-map-name表示该红外模块使用的“keycode-scancode”的映射表,默认使用内核中的空表,该属性可设置的值可参考rc-map.h
3. 调试指南
3.1. 调试开关
CIR的驱动中包含一些dev_dbg的调试信息,默认情况下是不会打印的,当需要进行跟踪调试时,可通过以下步骤打开这些调试信息。
3.1.1. 调整log等级
通过menuconfig调整内核的log等级
Kernel hacking--->
printk and dmesg options--->
(8) Default console loglevel (1-15)
打开调试开关
Kernel hacking--->
Artinchip Debug--->
[*] CIR driver debug